package com.javadroid.facade;

import java.io.InputStream;
import java.util.Calendar;
import java.util.List;

import android.content.Context;

import com.javadroid.dao.CapitulosDAO;
import com.javadroid.dao.EmissorasDAO;
import com.javadroid.dao.NovelasDAO;
import com.javadroid.interfaces.InterfaceDAO;
import com.javadroid.interfaces.InterfaceModel;
import com.javadroid.model.CapituloModel;
import com.javadroid.model.EmissoraModel;
import com.javadroid.model.NovelaModel;

public class SmartNovelasFacade {

	private Context context;
	private InterfaceDAO idao;
	private static String[] arrayEmissoras;
	private CapitulosDAO cdao;
	private NovelasDAO ndao;
	
	
	public SmartNovelasFacade(Context context) {
		this.context = context;
	}
	
	public void tipo(InterfaceModel model){
		if(model instanceof NovelaModel){
			idao = new NovelasDAO(context);
		}else if(model instanceof CapituloModel){
			idao = new CapitulosDAO(context);
		}else{
			idao = new EmissorasDAO(context);
		}
	}
	
	public boolean adicionar(InterfaceModel model) {
		tipo(model);
		return idao.adicionar(model);
		 
	}


	public void remover(int id,InterfaceModel model) {
		tipo(model);
		idao.remover(id);
	}


	public boolean updateModel(InterfaceModel model) {
		tipo(model);
		return idao.updateModel(model);
	}


	public InterfaceModel getModel(int id, InterfaceModel model) {
		tipo(model);
		return idao.getModel(id);
		
	}


	public List<InterfaceModel> getLista(InterfaceModel model) {
		tipo(model);
		return idao.getLista();
		
	}
	
	
	public String[] getEmissoras() {
		if(arrayEmissoras == null){
			List<InterfaceModel> emissoras = getLista(new EmissoraModel());
			arrayEmissoras = new String[emissoras.size()];
			for (int i = 0; i < emissoras.size(); i++) {
				arrayEmissoras[i] = ((EmissoraModel)emissoras.get(i)).getEmissora();	
			}
		}
		return arrayEmissoras;
	}
	
	public String[] getCapitulosDaNovela2(int novela) {
		List<CapituloModel> lista = getCapitulosPorNovela(novela);
		String[] dimensionado = new String[lista.size()];
		for (int i = 0; i < lista.size(); i++) {
			dimensionado[i] = lista.get(i).getCapitulo();
		}
		return dimensionado;
	}
	
	
	//menos genericos
	public List<NovelaModel> getListaDeNovelasPorEmissora(int emissora) {
		ndao = new NovelasDAO(context);
		return ndao.getListaDeNovelaPorEmissora(emissora);
		
	}
	
	public List<NovelaModel> getListaDeNovelasPorEmissoraLidas(int emissora) {
		ndao = new NovelasDAO(context);
		return ndao.getListaDeNovelaPorEmissora(emissora);
		
	}
	
	public List<NovelaModel> getListaDeNovelaLidas() {
		ndao = new NovelasDAO(context);
		return ndao.getListaDeNovelaLidas();
		
	}
	
	public List<CapituloModel> getCapitulosPorNovela(int idNovela) {
		cdao = new CapitulosDAO(context);
		return cdao.getListaCapitulosPorNovela(idNovela);

		
	}

	public int getIdNovela(String novela) {
		ndao = new NovelasDAO(context);
		return ndao.getIdNovela(novela);
	}
	
	public int adicionaCapituloJson(String json){
		cdao = new CapitulosDAO(context);
		return cdao.adicionaCapituloJson(json);
	}
	
	public int getMaxCapitulos(int id_novela){
		cdao = new CapitulosDAO(context);
		return cdao.getMaxCapitulo(id_novela);
	}
	
	public int getCountNovelas(){
		cdao = new CapitulosDAO(context);
		return cdao.getCountNovelas();
	}
	
	public boolean isLida(int id_novela){
		ndao = new NovelasDAO(context);
		boolean ok = ndao.isLida(id_novela) > 0 ? true : false; 
		return ok;
		
	}

	public void primeiraCargaNovelasAtivas(String json){
		ndao = new NovelasDAO(context);
		ndao.adicionaNovelasJson(json);
	}
	
	public InputStream openHttpConnectionGetJson(int id_novela){
		cdao = new CapitulosDAO(context);
		return cdao.openHttpConnectionGetJson(id_novela);
	}

	public void updateCapitulosDaNovela(int id_novela) {
		cdao = new CapitulosDAO(context);
	}
	
	
	public Calendar dataDeUpdateDaNovela(int id_novela){
		Calendar cal = ndao.dataDeUpdateDaNovela(id_novela); 
		return cal;
	}
}
